import os
import allure
import pytest
import sys
from common.logger import Logger
from common.read_yaml import ReadYaml_By_Root_Dict

sys.path.append("..")
from api import login_api

data = ReadYaml_By_Root_Dict("configs/environment_var.yml").get_yaml_data()  # 读取数据


# -----------------------------登录以及初始化环境--------------------------------------------

def pytest_addoption(parser):
    """
    增加参数env
    :param parser:
    :return:
    """
    parser.addoption("--env", action="store", default="single",
                     choices=['saas', 'saas_myyscm_test', 'saas_myyscm_pre', 'saas_myyscm_production',
                              'saas_myspace_test', 'saas_myspace_pre', 'saas_myspace_production'],
                     # 环境参数必须在list中，此参数在environment_var.yml中对应，以免参数传错
                     help="将命令行参数 ’--env' 添加到 pytest 配置中，执行环境")


# 执行环境的切换
@pytest.fixture(scope='session', autouse=True)
def set_env(request):
    """
    如何获取环境参数进行切换：
    一、命令行传入 pytest --env single test.py
    二、通过pytest.ini传入： addopts = --env single
    三、通过pycharm运行时的additional arugemnts传入
    :param request:
    :return:
    """
    os.environ["api_test_env"] = request.config.getoption("--env")
    Logger.info(f'当前用例运行测试环境:{os.environ["api_test_env"]}')


@pytest.fixture(scope="function")
@allure.step("指定用户登录")
def user_login():
    # 流程中心发起时登录
    return login_api.Login()


@pytest.fixture(scope="function")
@allure.step("不带session登录")
def user_login_no_session():
    # 业务系统发起时登录
    return login_api


# ids显示中文
def pytest_collection_modifyitems(session, config, items):
    for item in items:
        item.name = item.name.encode("utf-8").decode("unicode-escape")
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode-escape")
